HandStack 백엔드 코드 디버깅

버그를 잡는 탐정이 되어보세요!

QCN

왜 디버깅이 중요한가요?

  • 프로그래밍의 실수는 필연적입니다. 버그는 언제나 발생할 수 있습니다.
  • 디버깅은 문제의 원인을 빠르고 정확하게 찾아 해결하는 필수 개발 능력입니다.
  • 디버깅을 잘하면,
    • 개발 시간을 단축할 수 있습니다.
    • 코드의 동작 원리를 더 깊이 이해하게 됩니다.
    • 더 안정적이고 품질 높은 소프트웨어를 만들 수 있습니다.
QCN

Visual Studio 2022로 디버깅 시작하기

목표

  • Visual Studio 2022를 사용하여 HandStack 백엔드 코드의 디버깅 환경을 설정하고, 기본적인 디버깅 기능을 사용해 봅니다.

디버거란?

  • 코드의 실행을 원하는 지점에서 멈추고, 변수의 값을 확인하며, 실행 흐름을 한 단계씩 따라갈 수 있도록 도와주는 도구입니다.
QCN

VS 2022 디버거 기본 기능

  • 중단점 (Breakpoint) F9
    • 코드 실행을 잠시 멈추고 싶은 위치에 설정합니다.
  • 프로시저 단위 실행 (Step Over) F10
    • 현재 줄의 함수를 실행하고 다음 줄로 넘어갑니다. 함수 내부로 들어가지 않습니다.
  • 한 단계씩 코드 실행 (Step Into) F11
    • 현재 줄에 함수가 있다면 그 함수 내부로 들어갑니다.
  • 프로시저 나가기 (Step Out) Shift + F11
    • 현재 함수를 빠져나와 호출한 곳으로 돌아갑니다.
  • 다시 시작 (Restart) Ctrl + Shift + F5 / 중지 (Stop) Shift + F5
    • 디버깅 세션을 다시 시작하거나 완전히 종료합니다.
QCN

디버깅 환경 설정 (launch.json)

  • HandStack 프로젝트는 기본적인 디버깅 설정이 포함되어 있습니다.
  • server 디렉토리 내 .vscode/launch.json 파일에서 설정을 확인할 수 있습니다.
  • 대부분의 경우, 별도 설정 없이 바로 디버깅을 시작할 수 있습니다.
// .vscode/launch.json 예시 (ASP.NET Core)
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/bin/Debug/net8.0/Server.dll",
            "args": [],
            "cwd": "${workspaceFolder}",
            "stopAtEntry": false,
            // ...
        }
    ]
}
QCN

실습: Product API 디버깅 (VS 2022)

  1. server/Apps/Controllers/ProductController.cs 파일을 엽니다.
  2. Get 또는 Post 메서드 내부 코드 라인 왼쪽에 마우스를 클릭하여 중단점을 설정합니다. (빨간 원 표시)
  3. F5 키를 누르거나, 상단의 Run and Debug 패널에서 디버깅을 시작합니다.
  4. Postman이나 웹 브라우저를 사용하여 해당 API를 호출합니다.
  5. Visual Studio가 활성화되며, 중단점에서 코드 실행이 멈춥니다.
  6. F10, F11 키를 눌러 코드 실행 흐름을 추적합니다.
  7. 마우스를 변수 위에 올려놓거나 조사식, 지역 창에서 실시간으로 변수 값을 확인합니다.
QCN

HandStack + Visual Studio 2022

HandStack은 Visual Studio 2022 와의 연동이 매끄러워서 백엔드 디버깅도 쉽게 시작할 수 있습니다. 문제가 생겼을 때 개발 시간을 획기적으로 줄여줄 거예요.

QCN

JetBrains Rider로 디버깅 시작하기

목표

  • .NET 개발자들에게 인기있는 IDE, JetBrains Rider를 사용하여 HandStack 백엔드 코드를 디버깅해 봅니다.

Rider의 특징

  • 강력한 코드 분석 및 리팩토링 기능과 함께 직관적인 디버깅 환경을 제공합니다.
  • Visual Studio와 유사한 디버깅 기능을 제공하여 쉽게 적응할 수 있습니다.
QCN

Rider 디버거 기본 기능

  • 중단점 (Breakpoint) Ctrl + F8
  • 프로시저 단위 실행 (Step Over) F10
  • 한 단계씩 코드 실행 (Step Into) F11
  • 프로시저 나가기 (Step Out) Shift + F11
  • 다시 실행 (Rerun) Ctrl + F5 / 중지 (Stop) Shift + F5
  • 변수 감시 (Watch)표현식 계산 (Evaluate Expression) 기능이 강력합니다.
QCN

디버깅 환경 설정 (Rider)

  • Rider는 프로젝트를 열 때 자동으로 실행 구성을 감지합니다.
  • 우측 상단의 실행 구성 드롭다운 메뉴에서 디버깅할 프로젝트를 선택합니다.
  • Run → Edit Configurations... 메뉴에서 .NET Launch Settings Profile 또는 .NET Project 구성을 확인하고 수정할 수 있습니다.
  • 대부분의 HandStack 프로젝트는 별도 설정 없이 바로 인식됩니다.
QCN

실습: Product API 디버깅 (Rider)

  1. server/Apps/Controllers/ProductController.cs 파일을 엽니다.
  2. Get 또는 Post 메서드 내부 코드 라인 왼쪽 여백을 클릭하여 중단점을 설정합니다.
  3. 상단 툴바의 벌레 모양 디버그 아이콘을 클릭하거나 Shift + F9 키를 누릅니다.
  4. Postman이나 웹 브라우저를 사용하여 해당 API를 호출합니다.
  5. Rider의 Debug 툴 윈도우가 나타나며, 중단점에서 실행이 멈춥니다.
  6. 디버그 패널의 아이콘이나 단축키로 코드 흐름을 추적합니다.
  7. Variables 탭에서 변수 값을 확인합니다.
QCN

HandStack + JetBrains Rider

HandStack은 JetBrains Rider와의 연동이 원활해서 백엔드 디버깅도 쉽게 시작할 수 있습니다. 문제가 생겼을 때 개발 시간을 획기적으로 줄여줄 거예요.

QCN

디버깅 심화: 코드 속 탐험하기

  • 기본적인 디버깅에 익숙해졌다면, 더 강력한 기능으로 복잡한 문제를 해결해 봅시다.
  • 변수, 조사식, 호출 스택은 디버깅의 핵심 3요소입니다.

목표

  • Visual Studio 2022 디버거의 고급 기능인 변수(Variables) 확인, 감시(Watch), 호출 스택(Call Stack)을 활용하여 복잡한 문제의 원인을 분석합니다.
QCN

고급 디버깅 도구 (VS 2022 기준)

  • 변수(Variables) 패널 (지역, 자동 창)
    • 현재 실행 중인 코드 범위 내의 모든 변수 값을 실시간으로 보여줍니다.
  • 조사식(Watch) 패널
    • 내가 원하는 특정 변수나 price * quantity 같은 표현식을 등록하여 값을 지속적으로 모니터링합니다.
  • 호출 스택(Call Stack) 패널
    • 현재 지점까지 어떤 함수들이 순서대로 호출되었는지 경로를 보여줍니다. "코드가 어떤 길을 걸어왔나?"를 알 수 있습니다.
QCN

조건부 중단점 & 로그 포인트

  • 조건부 중단점 (Conditional Breakpoint)
    • 수많은 데이터 중 특정 조건일 때만 확인하고 싶을 때 사용합니다.
    • 중단점을 우클릭하여 조건을 설정합니다. (예: request.ProductID == "A123")
    • "이 조건이 참(true)일 때만 멈춰!"
  • 로그 포인트 (Logpoint)
    • 실행을 멈추지 않고, 디버그 출력 창에 원하는 메시지만 기록하고 싶을 때 사용합니다.
    • 코드에 Console.WriteLine을 추가하고 다시 빌드할 필요가 없습니다.
    • "멈추지는 말고, 현재 처리 중인 ID: {request.ProductID} 라고 알려줘!"
QCN

실습: 심화 디버깅 활용하기

  1. Product API의 로직에 계산을 위한 임시 변수들을 추가해봅니다.
  2. 특정 상품 ID가 들어왔을 때만 멈추도록 조건부 중단점을 설정합니다.
  3. 조사식 패널에 특정 변수와 계산식(예: price * 1.1)을 추가하여 값이 어떻게 변하는지 추적합니다.
  4. 호출 스택 패널을 보고, API 요청이 ASP.NET Core 프레임워크를 거쳐 컨트롤러 메서드까지 어떻게 도달했는지 호출 경로를 확인해봅니다.
QCN

디버깅, 어렵지 않아요!

디버거는 마치 엑스레이 기계 같아요. 코드 내부에서 무슨 일이 벌어지는지 투명하게 보여줘서 어디가 아픈지(버그인지) 정확히 찾아낼 수 있죠!

  • 처음에는 어색하지만, 계속 사용하다 보면 가장 친한 친구가 될 것입니다.
  • 문제가 생겼을 때 Console.WriteLine부터 찍어보기보다, 디버거를 먼저 켜는 습관을 들여보세요.
QCN

감사합니다

Q & A

QCN